#include<iostream>
#include<cstring>
using namespace std;
int n;
int dp[10][10],p[10],path[10][10];
void matrix()
{
    for(int i=1;i<=n;i++) dp[i][i]=0;
    for(int i=1;i<=n-1;i++)
    {
        for(int j=1;j<=n-i;j++)
        {
            dp[j][j+i]=dp[j+1][j+i]+p[j-1]*p[j]*p[j+i];
            path[j][j+i]=j;
            for(int k=j+1;k<=j+i-1;k++)
            {
                int t=dp[j][k]+dp[k+1][j+i]+p[j-1]*p[k]*p[j+i];
                if(t<dp[j][j+i])
                {
                    dp[j][j+i]=t;
                    path[j][j+i]=k;
                }
            }
        }
    }
}
void trace(int l,int r)
{
    if(l+1>=r) return;
    trace(l,path[l][r]);
    trace(path[l][r]+1,r);
    cout<<l<<" ~ "<<path[l][r]<<" * "<<path[l][r]+1<<" ~ "<<r<<endl;
}
int main()
{
    cin>>n;
    for(int i=0;i<=n;i++)
    cin>>p[i];
    matrix();
    trace(1,n);
    cout<<dp[1][n]<<endl;
}